/**
 * 
 */
package modelo.tests;

import junit.framework.TestCase;
import modelo.MetodosNumericos.DiferenciasCentrales;
import modelo.MetodosNumericos.SeccionDoradaParaMaximo;
import modelo.MetodosNumericos.SeccionDoradaParaMinimo;
import modelo.MetodosNumericos.Simpson;
import modelo.abstraccionesGeometricas.Intervalo;
import modelo.abstraccionesGeometricas.Punto;
import modelo.funciones.Constante;
import modelo.funciones.Funcion;
import modelo.funciones.FuncionCompuesta;
import modelo.funciones.Potencia;
import modelo.operaciones.Producto;
/**
 * @author Laura
 *
 */
public class ProductoTest extends TestCase {

	private Funcion funcion ;
	private Intervalo intervalo;
	
	/* (non-Javadoc)
	 * @see junit.framework.TestCase#setUp()
	 */
	@Override
	protected void setUp() throws Exception {
		super.setUp();
		this.funcion= new FuncionCompuesta(new Potencia(2),new Constante(3),new Producto());
		this.funcion.setMetodoParaDerivar(new DiferenciasCentrales());
		this.funcion.setMetodoParaIntegrar(new Simpson());
		this.funcion.setMetodoParaEncontrarMaximo(new SeccionDoradaParaMaximo());
		this.funcion.setMetodoParaEncontrarMinimo(new SeccionDoradaParaMinimo());
		intervalo=new Intervalo(0,1);
	}

	public void testAplicar(){ 
		double doble = funcion.evaluar(3d);	
		assertTrue(doble == 27d);
	}
	
	public void testDerivar(){
		double valor= funcion.calcularDerivada(new Punto(2d,0d));
		boolean bandera=false;
		if (valor<12.0001 && valor>11.9999) bandera=true;
		assertTrue(bandera == true);
	}
	
	public void testIntegrar(){
		boolean bandera=false;
		double valor= funcion.integrar(intervalo);
		if (valor<1.0001 && valor>0.9999) bandera=true;
		assertTrue(bandera == true);
	}
	
	public void testMaximo(){
		boolean bandera=false;
		Punto valor= funcion.Maximo(intervalo);
		if (valor.getCoordenadaY()<3.0001 && valor.getCoordenadaY()>2.9999) bandera=true;
		assertTrue(bandera == true);
	}
	
	public void testMinimo(){
		boolean bandera=false;
		Punto valor= funcion.Minimo(intervalo);
		if (valor.getCoordenadaY()<0.000001 && valor.getCoordenadaY()>-0.000001) bandera=true;
		assertTrue(bandera == true);
	}
}
